Revert "css: Make font property a shorthand"
authorBenjamin Otte <otte@redhat.com>
Thu, 2 Jun 2011 00:31:44 +0000 (02:31 +0200)
committerBenjamin Otte <otte@redhat.com>
Thu, 2 Jun 2011 00:31:44 +0000 (02:31 +0200)
The hack in gtk_style_context_get_font() was causing segfaults in
combobox code. This is not acceptable and I'm not awake enough to fix
it, so just reverting until it's fixed sanely is easiest.

This reverts commit cf6bfbdb17412a48c72b53aa1ad6d141114c48bc.

gtk/gtkcssparser.c
gtk/gtkcssprovider.c
gtk/gtkstylecontext.c
gtk/gtkstyleproperty.c

index 463baf90bdf07ff0e89416d6dd3e2a1aa78e8eaa..3aab85e67a89be7a20a9ace00427f9eb2ec9173a 100644 (file)
@@ -386,10 +386,7 @@ _gtk_css_parser_read_string (GtkCssParser *parser)
   quote = *parser->data;
   
   if (quote != '"' && quote != '\'')
-    {
-      _gtk_css_parser_error (parser, "Expected a string.");
-      return NULL;
-    }
+    return NULL;
   
   parser->data++;
   str = g_string_new (NULL);
index 7cf3a4f7108af3fd785e5f92438ebcf98bb7c02b..2e50b0c7156ea6fc3c3bf6b9eb5b19dd3f797165 100644 (file)
  *         <entry>border-color</entry>
  *       </row>
  *       <row>
- *         <entry>font-family</entry>
- *         <entry>@family [, @family]*</entry>
- *         <entry>#gchararray</entry>
- *         <entry>font-family: Sans, Arial;</entry>
- *       </row>
- *       <row>
- *         <entry>font-style</entry>
- *         <entry>[normal|oblique|italic]</entry>
- *         <entry>#PANGO_TYPE_STYLE</entry>
- *         <entry>font-style: italic;</entry>
- *       </row>
- *       <row>
- *         <entry>font-variant</entry>
- *         <entry>[normal|small-caps]</entry>
- *         <entry>#PANGO_TYPE_VARIANT</entry>
- *         <entry>font-variant: normal;</entry>
- *       </row>
- *       <row>
- *         <entry>font-weight</entry>
- *         <entry>[normal|bold|bolder|lighter|100|200|300|400|500|600|700|800|900]</entry>
- *         <entry>#PANGO_TYPE_WEIGHT</entry>
- *         <entry>font-weight: bold;</entry>
- *       </row>
- *       <row>
- *         <entry>font-size</entry>
- *         <entry>Font size in point</entry>
- *         <entry>#gint</entry>
- *         <entry>font-size: 13;</entry>
- *       </row>
- *       <row>
  *         <entry>font</entry>
  *         <entry>@family [@style] [@size]</entry>
  *         <entry>#PangoFontDescription</entry>
index 031746b833ab103a5a54dac262822880a2c96af8..9810ddd28d2b7be885f2f17be856ae4c153cb6b3 100644 (file)
@@ -3562,7 +3562,7 @@ gtk_style_context_get_font (GtkStyleContext *context,
 {
   GtkStyleContextPrivate *priv;
   StyleData *data;
-  PangoFontDescription *description;
+  const GValue *value;
 
   g_return_val_if_fail (GTK_IS_STYLE_CONTEXT (context), NULL);
 
@@ -3570,15 +3570,12 @@ gtk_style_context_get_font (GtkStyleContext *context,
   g_return_val_if_fail (priv->widget_path != NULL, NULL);
 
   data = style_data_lookup (context);
-  gtk_style_properties_get (data->store, state, "font", &description, NULL);
-  /* Yuck, fonts are created on-demand but we don't return a ref.
-   * Do bad things to achieve this requirement */
-  g_object_set_data_full (G_OBJECT (data->store),
-                          "last-gotten-font",
-                          description,
-                          (GDestroyNotify) pango_font_description_free);
-
-  return description;
+  value = _gtk_style_properties_peek_property (data->store, "font", state, NULL);
+
+  if (value)
+    return g_value_get_boxed (value);
+
+  return NULL;
 }
 
 static void
index 811560349445798ab41e1b4f90ab196f570602cf..7b4e092d38b7520a1b3f415e32db839a190a5c7c 100644 (file)
@@ -22,7 +22,6 @@
 #include "gtkstylepropertyprivate.h"
 
 #include <errno.h>
-#include <math.h>
 #include <stdlib.h>
 #include <string.h>
 
@@ -228,74 +227,6 @@ symbolic_color_value_print (const GValue *value,
     }
 }
 
-static gboolean
-font_family_parse (GtkCssParser *parser,
-                   GFile        *base,
-                   GValue       *value)
-{
-  GPtrArray *names;
-  char *name;
-
-  /* We don't special case generic families. Pango should do
-   * that for us */
-
-  names = g_ptr_array_new ();
-
-  do {
-    name = _gtk_css_parser_try_ident (parser, TRUE);
-    if (name)
-      {
-        GString *string = g_string_new (name);
-        g_free (name);
-        while ((name = _gtk_css_parser_try_ident (parser, TRUE)))
-          {
-            g_string_append_c (string, ' ');
-            g_string_append (string, name);
-            g_free (name);
-          }
-        name = g_string_free (string, FALSE);
-      }
-    else 
-      {
-        name = _gtk_css_parser_read_string (parser);
-        if (name == NULL)
-          {
-            g_ptr_array_free (names, TRUE);
-            return FALSE;
-          }
-      }
-
-    g_ptr_array_add (names, name);
-  } while (_gtk_css_parser_try (parser, ",", TRUE));
-
-  /* NULL-terminate array */
-  g_ptr_array_add (names, NULL);
-  g_value_set_boxed (value, g_ptr_array_free (names, FALSE));
-  return TRUE;
-}
-
-static void
-font_family_value_print (const GValue *value,
-                         GString      *string)
-{
-  const char **names = g_value_get_boxed (value);
-
-  if (names == NULL || *names == NULL)
-    {
-      g_string_append (string, "none");
-      return;
-    }
-
-  string_append_string (string, *names);
-  names++;
-  while (*names)
-    {
-      g_string_append (string, ", ");
-      string_append_string (string, *names);
-      names++;
-    }
-}
-
 static gboolean 
 font_description_value_parse (GtkCssParser *parser,
                               GFile        *base,
@@ -1638,119 +1569,6 @@ pack_border_radius (GValue             *value,
   g_free (top_left);
 }
 
-static GParameter *
-unpack_font_description (const GValue *value,
-                         guint        *n_params)
-{
-  GParameter *parameter = g_new0 (GParameter, 5);
-  PangoFontDescription *description;
-  PangoFontMask mask;
-  guint n;
-  
-  /* For backwards compat, we only unpack values that are indeed set.
-   * For strict CSS conformance we need to unpack all of them.
-   * Note that we do set all of them in the parse function, so it
-   * will not have effects when parsing CSS files. It will though
-   * for custom style providers.
-   */
-
-  description = g_value_get_boxed (value);
-  n = 0;
-
-  if (description)
-    mask = pango_font_description_get_set_fields (description);
-  else
-    mask = 0;
-
-  if (mask & PANGO_FONT_MASK_FAMILY)
-    {
-      GPtrArray *strv = g_ptr_array_new ();
-
-      g_ptr_array_add (strv, g_strdup (pango_font_description_get_family (description)));
-      g_ptr_array_add (strv, NULL);
-      parameter[n].name = "font-family";
-      g_value_init (&parameter[n].value, G_TYPE_STRV);
-      g_value_take_boxed (&parameter[n].value,
-                          g_ptr_array_free (strv, FALSE));
-      n++;
-    }
-
-  if (mask & PANGO_FONT_MASK_STYLE)
-    {
-      parameter[n].name = "font-style";
-      g_value_init (&parameter[n].value, PANGO_TYPE_STYLE);
-      g_value_set_enum (&parameter[n].value,
-                        pango_font_description_get_style (description));
-      n++;
-    }
-
-  if (mask & PANGO_FONT_MASK_VARIANT)
-    {
-      parameter[n].name = "font-variant";
-      g_value_init (&parameter[n].value, PANGO_TYPE_VARIANT);
-      g_value_set_enum (&parameter[n].value,
-                        pango_font_description_get_variant (description));
-      n++;
-    }
-
-  if (mask & PANGO_FONT_MASK_WEIGHT)
-    {
-      parameter[n].name = "font-weight";
-      g_value_init (&parameter[n].value, PANGO_TYPE_WEIGHT);
-      g_value_set_enum (&parameter[n].value,
-                        pango_font_description_get_weight (description));
-      n++;
-    }
-
-  if (mask & PANGO_FONT_MASK_SIZE)
-    {
-      parameter[n].name = "font-size";
-      g_value_init (&parameter[n].value, G_TYPE_DOUBLE);
-      g_value_set_double (&parameter[n].value,
-                          (double) pango_font_description_get_size (description) / PANGO_SCALE);
-      n++;
-    }
-
-  *n_params = n;
-
-  return parameter;
-}
-
-static void
-pack_font_description (GValue             *value,
-                       GtkStyleProperties *props,
-                       GtkStateFlags       state)
-{
-  PangoFontDescription *description;
-  char **families;
-  PangoStyle style;
-  PangoVariant variant;
-  PangoWeight weight;
-  double size;
-
-  gtk_style_properties_get (props,
-                            state,
-                            "font-family", &families,
-                            "font-style", &style,
-                            "font-variant", &variant,
-                            "font-weight", &weight,
-                            "font-size", &size,
-                            NULL);
-
-  description = pango_font_description_new ();
-  /* xxx: Can we set all the families here somehow? */
-  if (families)
-    pango_font_description_set_family (description, families[0]);
-  pango_font_description_set_size (description, round (size * PANGO_SCALE));
-  pango_font_description_set_style (description, style);
-  pango_font_description_set_variant (description, variant);
-  pango_font_description_set_weight (description, weight);
-
-  g_free (families);
-
-  g_value_take_boxed (value, description);
-}
-
 /*** API ***/
 
 static void
@@ -2127,73 +1945,14 @@ gtk_style_property_init (void)
                                                               "Background color",
                                                               GDK_TYPE_RGBA, 0));
 
-  _gtk_style_property_register           (g_param_spec_boxed ("font-family",
-                                                              "Font family",
-                                                              "Font family",
-                                                              G_TYPE_STRV, 0),
-                                          GTK_STYLE_PROPERTY_INHERIT,
-                                          NULL,
-                                          NULL,
-                                          NULL,
-                                          font_family_parse,
-                                          font_family_value_print,
-                                          NULL);
-  _gtk_style_property_register           (g_param_spec_enum ("font-style",
-                                                             "Font style",
-                                                             "Font style",
-                                                             PANGO_TYPE_STYLE,
-                                                             PANGO_STYLE_NORMAL, 0),
-                                          GTK_STYLE_PROPERTY_INHERIT,
-                                          NULL,
-                                          NULL,
-                                          NULL,
-                                          NULL,
-                                          NULL,
-                                          NULL);
-  _gtk_style_property_register           (g_param_spec_enum ("font-variant",
-                                                             "Font variant",
-                                                             "Font variant",
-                                                             PANGO_TYPE_VARIANT,
-                                                             PANGO_VARIANT_NORMAL, 0),
-                                          GTK_STYLE_PROPERTY_INHERIT,
-                                          NULL,
-                                          NULL,
-                                          NULL,
-                                          NULL,
-                                          NULL,
-                                          NULL);
-  /* xxx: need to parse this properly, ie parse the numbers */
-  _gtk_style_property_register           (g_param_spec_enum ("font-weight",
-                                                             "Font weight",
-                                                             "Font weight",
-                                                             PANGO_TYPE_WEIGHT,
-                                                             PANGO_WEIGHT_NORMAL, 0),
-                                          GTK_STYLE_PROPERTY_INHERIT,
-                                          NULL,
-                                          NULL,
-                                          NULL,
-                                          NULL,
-                                          NULL,
-                                          NULL);
-  _gtk_style_property_register           (g_param_spec_double ("font-size",
-                                                               "Font size",
-                                                               "Font size",
-                                                               0, G_MAXDOUBLE, 0, 0),
-                                          GTK_STYLE_PROPERTY_INHERIT,
-                                          NULL,
-                                          NULL,
-                                          NULL,
-                                          NULL,
-                                          NULL,
-                                          NULL);
   _gtk_style_property_register           (g_param_spec_boxed ("font",
                                                               "Font Description",
                                                               "Font Description",
                                                               PANGO_TYPE_FONT_DESCRIPTION, 0),
                                           GTK_STYLE_PROPERTY_INHERIT,
                                           NULL,
-                                          unpack_font_description,
-                                          pack_font_description,
+                                          NULL,
+                                          NULL,
                                           font_description_value_parse,
                                           font_description_value_print,
                                           NULL);